package com.rjwh.dingdong.client.service;

import android.content.Context;
import android.util.Log;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.rjwh.dingdong.client.application.MyApplication;
import com.rjwh.dingdong.client.constant.LocalConstant;
import com.rjwh.dingdong.client.util.LogUtil;

/**
 * 项目名称：whrjwh-parent
 * 类描述：
 * 创建人：wby
 * 创建时间：2016/7/1 11:20
 * 修改人：wby
 * 修改时间：2016/7/1 11:20
 * 修改备注：
 *
 * @version V1.0
 */
public class LocationService {

    private int scanTime = 300000;//30秒鐘掃描
    private LocationClient locationClient;
    private Context context;

    public LocationService(Context context) {
        this.context = context;

    }

    /**
     * 打开定位
     */
    public void requestPeriodLocationUpdate() {
        if (locationClient == null) {
            initLocationManager();
        }
        locationClient.start();
        locationClient.requestLocation();
    }

    /**
     * 停止定位
     */
    public void stopLocation() {
        if (locationClient != null && locationClient.isStarted()) {
            locationClient.stop();
        }
    }

    /**
     * 初始化定位条件
     */
    private void initLocationManager() {
        locationClient = new LocationClient(context);
        // 设置定位条件
        final LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true); // 是否打开GPS
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);// 设置高精度定位定位模式
        option.setCoorType("bd09ll"); // 设置返回值的坐标类型。
        option.setProdName("PublishTopicLocation"); // 设置产品线名称。强烈建议您使用自定义的产品线名称，方便我们以后为您提供更高效准确的定位服务。
        option.setScanSpan(scanTime); // 设置定时定位的时间间隔。单位毫秒
        option.setIsNeedAddress(true);// 反编译获得具体位置，只有网络定位才可以
        locationClient.setLocOption(option);
        // 注册位置监听器
        locationClient.registerLocationListener(new BDLocationListener() {

            @Override
            public void onReceiveLocation(BDLocation location) {
                if (location == null) {
                    return;
                }
                LogUtil.e("LocationService", "location.getLocType():" + location.getLocType());
                if (location.getLocType() == BDLocation.TypeGpsLocation
                        ||location.getLocType() == BDLocation.TypeNetWorkLocation
                        || location.getLocType() == BDLocation.TypeOffLineLocation
                        ) {// GPS定位结果
                    LogUtil.i("定位成功 City " + location.getCity() + "addr " + location.getAddrStr() + " loc:" + location.getLongitude() + " lat:" + location.getLatitude());
                    MyApplication.spUtil.setStrPreference(context, LocalConstant.SP_LOC_PROVINCE, location.getProvince());
                    MyApplication.spUtil.setStrPreference(context, LocalConstant.SP_LOC_CITY, location.getCity());
                    MyApplication.spUtil.setStrPreference(context, LocalConstant.SP_LOC_ADDRESS, location.getAddrStr());
                    MyApplication.spUtil.setStrPreference(context, LocalConstant.SP_LOC_LATITUDE, "" + location.getLatitude());
                    MyApplication.spUtil.setStrPreference(context, LocalConstant.SP_LOC_LONGITUDE, "" + location.getLongitude());
                    stopLocation();
                }
                 else if (location.getLocType() == BDLocation.TypeServerError) {
//                    sb.append("\ndescribe : ");
//                    sb.append("服务端网络定位失败，可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com，会有人追查原因");
                } else if (location.getLocType() == BDLocation.TypeNetWorkException) {
//                    sb.append("\ndescribe : ");
//                    sb.append("网络不同导致定位失败，请检查网络是否通畅");
                } else if (location.getLocType() == BDLocation.TypeCriteriaException) {
//                    sb.append("\ndescribe : ");
//                    sb.append("无法获取有效定位依据导致定位失败，一般是由于手机的原因，处于飞行模式下一般会造成这种结果，可以试着重启手机");
                }else{
                    //错误
                }

            }

        });

    }
}
